//@author A0087294-reused
#ifndef __logging_h__
#define __logging_h__

#include "NullOutput.h"
#include "OutputStream.h"
#include "OutputLevelSwitchDisabled.h"
#include "OutputLevelRunTimeSwitch.h"
#include "Logger.h"

#ifndef LOGGING_DEFINE_OWN_OUTPUT_TYPE

#ifdef LOGGING_DISABLE

/*! \brief define NullOutput as output %device */
LOGGING_DEFINE_OUTPUT( ::logging::NullOutput )

// undefine the macro and redefine it as empty to switch off all
// user created output types and ensure that only the NullOutput
// is used as logging type
#undef LOGGING_DEFINE_OUTPUT
#define LOGGING_DEFINE_OUTPUT(NAME)

#else

#ifdef __AVR__
#include "logging/loggingConfigAVR.h"
#else
#include "loggingConfigGeneralPurposeOS.h"
#endif /* __AVR__ */


#ifndef LOGGING_DEFINE_EXTENDED_OUTPUT_TYPE
LOGGING_DEFINE_OUTPUT( ::logging::LoggingType )
#endif /* LOGGING_DEFINE_EXTENDED_OUTPUT_TYPE */

#endif /* LOGGING_DISABLE */

#endif /* LOGGING_DEFINE_OWN_OUTPUT_TYPE */

#endif /* __logging_h__ */
